var ds;
var grid;
var insertForm;
var updateForm;
var form;
var win;
var processDetailWin;
var LINENUM;
var processDetailForm;
var processDetailSm;
var detailSm;
var detailForm;
var processGrid;
var detailWin;
var maopiRecord = Ext.data.Record.create([{
			name : 'price',
			type : 'float'
		}]);
var process = Ext.data.Record.create([{
			name : 'transnum'
		}, {
			name : 'linenum'
		}, {
			name : 'type'

		}, {
			name : 'spec'
		}, {
			name : 'perqty',
			type : 'float'
		}, {
			name : 'mianji',
			type : 'float'
		}, {
			name : 'danjia',
			type : 'float'
		}, {
			name : 'tisheng',
			type : 'float'
		}, {
			name : 'jiage',
			type : 'float'
		}, {
			name : 'pecent1',
			type : 'float'
		}, {
			name : 'processCost',
			type : 'float'
		}]);
var similaryList;
var simGrid;
var TRANSNUM;
var autoSave;
Ext.onReady(function() {
			initStore();
			ds.load({
						params : {
							start : 0,
							limit : 10
						}
					});

			initGrid();
			autoSave = new AutoSave();
			autoSave.addTask({
						name : 'saveManuCost()',
						action : saveManuCost
					});
			autoSave.addTask({
						name : 'saveProcsDetail()',
						action : saveProcsDetail
					});
		});
var detailFormStore, detailGridStore, schemeStore, maopiStore, stepStore;
var flag = false;
var processDsDirty = false;
var dsDirty = false;
var schemeArr = [];
var schemeDs = new Ext.data.SimpleStore({
			fields : ['scheme', 'value'],
			data : schemeArr
		});
function initStore() {
	stepStore = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : '../orderJiaGongIndex.do?action=step'
						}),
				reader : new Ext.data.JsonReader({
							totalProperty : 'totalProperty',
							root : 'root'
						}, [{
									name : 'processName'
								}, {
									name : 'processPos'
								}, {
									name : 'bz'
								}])
			});
	ds = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : '../priceInf.do?action=list'
						}),

				reader : new Ext.data.JsonReader({
							totalProperty : 'totalProperty',
							root : 'root'
						}, [{
									name : 'ssign'
								}, {
									name : 'spec'
								}, {
									name : 'plate'
								}, {
									name : 'transnum'
								}, {
									name : 'custid'
								}, {
									name : 'reqdate'
								}])
			});

	schemeStore = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : '../orderJiaGongIndex.do?action=scheme'
						}),

				reader : new Ext.data.JsonReader({

							root : 'root'
						}, [{
									name : 'scheme'
								}, {
									name : 'bz'
								}, {
									name : 'areaFunc'
								}])
			});
	similaryList = new Ext.data.Store({
				proxy : new Ext.data.HttpProxy({
							url : '../CostEstimate.do?action=getList'
						}),
				reader : new Ext.data.JsonReader({
							totalProperty : 'totalProperty',
							root : 'root'
						}, [{
									name : 'id'
								}, {
									name : 'spec'
								}, {
									name : 'factory'

								}, {
									name : 'transnum'
								}, {
									name : 'ordernum'
								}, {
									name : 'ssign'
								}, {
									name : 'ssign_yz'
								}, {
									name : 'grossweight',
									type : 'float'
								}, {
									name : 'qiandao_yield',
									type : 'float'
								}, {
									name : 'yimo',
									type : 'float'
								}, {
									name : 'weimo',
									type : 'float'
								}, {
									name : 'feipin',
									type : 'float'
								}, {
									name : 'qiandao_cost',
									type : 'float'
								}, {
									name : 'product_cost_before',
									type : 'float'
								}, {
									name : 'specType'
								}, {
									name : 'processScheme'
								}, {
									name : 'plate'
								}, {
									name : 'baozhuangfei',
									type : 'float'
								}, {
									name : 'houdao_yield',
									type : 'float'
								}, {
									name : 'product_cost_last',
									type : 'float'
								}, {
									name : 'date1'
								}, {
									name : 'ordercost',
									type : 'float'
								}, {
									name : 'lirun'
								}, {
									name : 'bz'
								}, {
									name : 'maker'
								}, {
									name : 'makeDate'
								}, {
									name : 'type'
								}, {
									name : 'peifang',
									type : 'float'
								}, {
									name : 'spec_yz'
								}, {
									name : 'month1'
								}, {
									name : 'year1'
								}, {
									name : 'status'
								}])

			});

	// var rec = ds.getAt(0);

	detailFormStore = new Ext.data.Store({
		proxy : new Ext.data.HttpProxy({
					url : '../DetailPrice.do?action=getForm'
				}),
		reader : new Ext.data.JsonReader({
					totalProperty : 'totalProperty',
					root : 'root'
				}, [{
							name : 'transnum'
						}, {
							name : 'kaiMoSpec'
						}, {
							name : 'getSpec'

						}, {
							name : 'netWeight',
							type : 'float'
						}, {
							name : 'grossWeight',
							type : 'float'
						}, {
							name : 'grossGPrice',
							type : 'float'
						}, {
							name : 'grossUpdate',
							type : 'float'
						}, {
							name : 'grossPrice',
							type : 'float'
						}, {
							name : 'mtrlProcsPrice',
							type : 'float'
						}, {
							name : 'congCiFee',
							type : 'float'
						}, {
							name : 'packFee',
							type : 'float'
						}, {
							name : 'otherFee',
							type : 'float'
						}, {
							name : 'baseCost',
							type : 'float'
						}, {
							name : 'totalUpdate',
							type : 'float'
						}, {
							name : 'amount',
							type : 'float'
						}, {
							name : 'sanXiangFee',
							type : 'float'
						}, {
							name : 'sanXiangRate',
							type : 'float'
						}, {
							name : 'taxFee',
							type : 'float'
						}, {
							name : 'taxRate',
							type : 'float'
						}, {
							name : 'mtrlProcs',
							type : 'float'
						}, {
							name : 'specType'
						}, {
							name : 'processScheme'
						}, {
							name : 'ssign'
						}, {
							name : 'plate'
						}])

			// reader : new Ext.data.ArrayReader(sortRec)
		});
	detailFormStore.on("update", function(_this, _rec, num) {
				// Number=1就是计算材料费，2就是计算加工费之后的价格。
				if (num < DOCALCGROSS) {
					calcGross(_this);
					return;
				}
				if (num < DOCALCPROGRESS) {
					detailGridStore.fireEvent("update", detailGridStore,
							detailGridStore.getAt(0));
					return;
				}
				if (num < DOCALBASE) {
					calcBaseFee(_this);
					return;
				}
				if (num < DOCALAMOUNT) {
					calcAmount(_this);
					return;
				}
				if (num < DOCALCALLSXF) {
					calcSXFee(_this);
					return;
				}
				if (num < DOCALCALLTRF) {
					calcTRFee(_this);
					return;
				}
				if (num < DOCALCALLFEE) {
					calcAllFee(_this);
					return;
				}
				loadRecord(detailForm, detailFormStore.getAt(0));
				if (num == DOCALCALLFEE)
					dsDirty = true;
			});
	detailFormStore.on("load", function(_this, rec, opt) {
				var rec = detailFormStore.getAt(0);
				orderSumMain.getScheme(rec.data["kaiMoSpec"], function(ret) {
							var record = -1;
							for (var i = 0; i < ret.length; i++) {
								if (ret[i].scheme != record) {
									record = ret[i].scheme;
									schemeArr.push(["", ret[i].scheme]);
								}
							}
							var k = 0;
							for (var i = 0; i < ret.length; i++) {
								k = ret[i].scheme - 1;
								if (i != 0)
									schemeArr[k][0] += ">";
								schemeArr[k][0] += ret[i].processName;
							}

							schemeDs.loadData(schemeArr);
						});

			});
	detailGridStore = new Ext.data.Store({
		proxy : new Ext.data.HttpProxy({
					url : '../DetailPrice.do?action=getGrid'
				}),
		reader : new Ext.data.JsonReader({
					totalProperty : 'totalProperty',
					root : 'root'
				}, [{
							name : 'transnum'
						}, {
							name : 'linenum'
						}, {
							name : 'type'

						}, {
							name : 'spec'
						}, {
							name : 'perqty',
							type : 'float'
						}, {
							name : 'mianji',
							type : 'float'
						}, {
							name : 'danjia',
							type : 'float'
						}, {
							name : 'tisheng',
							type : 'float'
						}, {
							name : 'jiage',
							type : 'float'
						}, {
							name : 'pecent1',
							type : 'float'
						}, {
							name : 'processCost',
							type : 'float'
						}])

			// reader : new Ext.data.ArrayReader(sortRec)
		});
	detailGridStore.on("update", function(_store, _record, _operation) {
		// 计算单价，
		// alert(update);
		_record.data["jiage"] = _record.data["mianji"] * _record.data["danjia"];

		calcAllUntilPrice(detailFormStore, detailGridStore);
		detailFormStore.getAt(0).data["mtrlProcsPrice"] = detailGridStore
				.getAt(detailGridStore.getCount() - 1).data["processCost"];
		detailFormStore.fireEvent("update", detailFormStore, detailFormStore
						.getAt(0), DOCALCPROGRESS);
		processDsDirty = true;
		detailForm.findById("detailId").getView().refresh();

	});

	maopiStore = new Ext.data.SimpleStore({
				fields : [{
							name : 'price',
							type : 'float'
						}

				]
			});

}

function initSimGrid() {
	var sm = new Ext.grid.CheckboxSelectionModel();
	if (!simGrid)
		simGrid = new Ext.grid.GridPanel({

					id : 'sim-grid',
					autoScoll : true,
					ds : similaryList,
					width : 340,
					height : 150,
					cm : new Ext.grid.ColumnModel([sm, {
								header : "编号",
								width : 60,
								sortable : true,
								dataIndex : 'id'
							}, {
								header : "月份",
								width : 60,
								sortable : true,
								dataIndex : 'month1'
							}, {
								header : "年份",
								width : 60,
								sortable : true,
								dataIndex : 'year1'
							}, {
								header : "规格",
								width : 60,
								sortable : true,
								dataIndex : 'spec'
							}, {
								header : "分厂号",
								width : 60,
								sortable : true,
								dataIndex : 'factory'
							}, {
								header : "牌号",
								width : 60,
								sortable : true,
								dataIndex : 'ssign'
							}, {
								header : "规格类型",
								width : 60,
								sortable : true,
								dataIndex : 'specType'

							}, {
								header : "加工流程编号",
								width : 60,
								sortable : true,
								dataIndex : 'processScheme'
							}, {
								header : "镀层",
								width : 60,
								sortable : true,
								dataIndex : 'plate'
							}, {
								header : "订单成本",
								width : 60,
								sortable : true,
								dataIndex : 'product_cost_last'
							}]),
					sm : sm,

					viewConfig : {
						forceFit : false
					}

				});
	// simGrid.hide();
	return simGrid;
}

function initProcessGrid() {
	var fm = Ext.form;
	var sm = new Ext.grid.CheckboxSelectionModel();
	if (!processGrid)
		processGrid = new Ext.grid.EditorGridPanel({
			id : 'detailId',
			viewConfig : {
				forceFit : false
			},
			autoScroll : true,
			ds : detailGridStore,
			sm : sm,
			height : 150,
			width : 500,
			enableDragDrop : true,
			// region : 'west',
			ddGroup : 'gridDDGroup',

			cm : new Ext.grid.ColumnModel([sm, {
						header : "编号",
						width : 50,
						sortable : true,
						editor : new fm.TextField({
									allowBlank : false
								}),
						dataIndex : 'transnum'
					}, {
						header : "行号",
						width : 50,
						sortable : true,
						editor : new fm.TextField({
									allowBlank : false
								}),
						dataIndex : 'linenum'
					}, {
						header : "类型",
						width : 50,
						sortable : true,
						editor : new fm.TextField({
									allowBlank : false
								}),
						dataIndex : 'type'
					}, {
						header : "加工规格",
						width : 50,
						sortable : true,
						editor : new fm.TextField({
									allowBlank : false
								}),
						dataIndex : 'spec'
					}, {
						header : "件数",
						width : 50,
						sortable : true,
						editor : new fm.TextField({
									allowBlank : false
								}),
						dataIndex : 'perqty'
					}, {
						header : "面积",
						width : 50,
						sortable : true,
						editor : new fm.TextField({
									allowBlank : false
								}),
						dataIndex : 'mianji'
					}, {
						header : "单价",
						width : 50,
						sortable : true,
						editor : new fm.TextField({
									allowBlank : false
								}),
						dataIndex : 'danjia'
					}, {
						header : "提升系数",
						width : 50,
						sortable : true,
						editor : new fm.TextField({
									allowBlank : false
								}),
						dataIndex : 'tisheng'
					}, {
						header : "成品率",
						width : 50,
						sortable : true,
						editor : new fm.TextField({
									allowBlank : false
								}),
						dataIndex : 'pecent1'
					}, {
						header : "加工费",
						width : 50,
						sortable : true,
						editor : new fm.TextField({
									allowBlank : false
								}),
						dataIndex : 'jiage'
					}, {
						header : "本工序止成本",
						width : 50,
						sortable : true,
						editor : new fm.TextField({
									allowBlank : false
								}),
						dataIndex : 'processCost'
					}])

				// renderTo : 'main'
			});
	return processGrid;
}

function getUpdateForm() {
	if (!simGrid)
		simGrid = initSimGrid();
	if (!updateForm) {
		updateForm = new Ext.FormPanel({
			url : '../CostEstimate.do?action=getList',
			labelAlign : 'left',
			title : '详细信息',
			buttonAlign : 'right',
			bodyStyle : 'padding:5px;',
			width : 400,
			autoScroll : true,
			frame : true,// 设置了面板的边角是圆弧过度的，底色
			// labelWidth : 80,

			items : [{
						layout : 'column',// 在formpanel的itmes加入一个column的定义
						border : false,
						labelSeparator : ':',
						items : [{
									columnWidth : .651,
									layout : 'form',
									border : false,
									items : [{
												xtype : 'textfield',
												fieldLabel : '规格',
												// readOnly : true,
												name : 'spec',
												allowBlank : false,
												anchor : '90%'
											}]
								}]
					}, {
						layout : 'column',// 在formpanel的itmes加入一个column的定义
						border : false,
						labelSeparator : ':',
						items : [{
									columnWidth : .651,
									layout : 'form',
									border : false,
									items : [{
												xtype : 'textfield',
												fieldLabel : '牌号',
												allowBlank : false,
												// readOnly : true,
												// value : _cus.attn,
												name : "ssign",
												anchor : '90%'
											}]
								}]

					}, {
						layout : 'column',// 在formpanel的itmes加入一个column的定义
						border : false,
						labelSeparator : ':',
						items : [{
									columnWidth : .651,
									layout : 'form',
									border : false,
									items : [{
												xtype : 'textfield',
												fieldLabel : '镀层',
												allowBlank : false,
												// readOnly : true,
												// value : _cus.attn,
												name : "plate",
												anchor : '90%'
											}]
								}]

					}, {
						layout : 'column',// 在formpanel的itmes加入一个column的定义
						border : false,
						labelSeparator : ':',
						items : [{
							columnWidth : .651,
							layout : 'form',
							border : false,
							items : [{

										fieldLabel : '规格类型',

										name : "specType",
										allowBlank : false,

										xtype : 'combo',
										store : sortStore,
										displayField : 'sort',

										listeners : {
											"select" : function(_combox, _rec,
													_index) {
												var sortType = _rec.data['sort'];

												/* 根据加工类型，动态的查找所有的加工 */
												schemeStore.load({
															params : {
																sortType : sortType
															}
														});
												return true;

											}
										},
										triggerAction : 'all',
										mode : 'local',

										anchor : '90%'
									}]
						}]

					}, {
						layout : 'column',// 在formpanel的itmes加入一个column的定义
						border : false,
						labelSeparator : ':',
						items : [{
							columnWidth : .651,
							layout : 'form',
							border : false,
							items : [{

										fieldLabel : '加工流程',
										allowBlank : false,
										xtype : 'combo',
										store : schemeStore,
										displayField : 'scheme',
										// typeAhead : true,
										triggerAction : 'all',
										mode : 'local',
										name : "scheme",
										listeners : {
											"select" : function(_this, _rec,
													_index) {

												Ext.Msg.alert("提示",
														_rec.data["bz"]);

											}
										},

										anchor : '90%'
									}]
						}]

					}, {
						layout : 'column',// 在formpanel的itmes加入一个column的定义
						border : false,
						labelSeparator : ':',
						items : [{
									columnWidth : .651,
									layout : 'form',
									border : false,
									items : [{
												xtype : 'textfield',
												fieldLabel : '分厂',
												allowBlank : false,
												// readOnly : true,
												// value : _cus.attn,
												name : "factory",
												anchor : '90%'
											}]
								}]

					}, {
						layout : 'column',// 在formpanel的itmes加入一个column的定义
						border : false,
						labelSeparator : ':',
						items : [{
									columnWidth : .651,
									layout : 'form',
									border : false,
									items : [{
												xtype : 'datefield',
												format : 'Y-m-d',
												fieldLabel : '日期',
												allowBlank : false,

												name : "date1",
												anchor : '90%'
											}]
								}]

					}, {
						layout : 'column',// 在formpanel的itmes加入一个column的定义
						border : false,
						labelSeparator : ':',
						items : [{
							columnWidth : .651,
							layout : 'form',
							border : false,
							items : [{
								xtype : 'textfield',
								fieldLabel : '估算成本',
								// readOnly : true,
								// value : _cus.attn,
								name : "cost",
								listeners : {
									"change" : function(_this, _new, _old) {
										// alert(_new+"::"+_old);
										var bl = updateForm
												.find("name", "rate")[0]
												.getValue();
										updateForm.find("name", "price")[0]
												.setValue(_new * (1 + bl));
									}
								},
								anchor : '90%'
							}]
						}]

					}, {
						layout : 'column',// 在formpanel的itmes加入一个column的定义
						border : false,
						labelSeparator : ':',
						items : [{
									columnWidth : .651,
									layout : 'form',
									border : false,
									items : [{
												xtype : 'textfield',
												fieldLabel : '产品报价',
												// readOnly : true,
												// value : _cus.attn,
												name : "price",
												anchor : '90%'
											}]
								}]

					}, {
						layout : 'column',// 在formpanel的itmes加入一个column的定义
						border : false,
						labelSeparator : ':',
						items : [{
							columnWidth : .651,
							layout : 'form',
							border : false,
							items : [{
								xtype : 'numberfield',
								fieldLabel : '提升比例',
								// readOnly : true,
								listeners : {
									"change" : function(_this, _new, _old) {
										var bl = updateForm
												.find("name", "cost")[0]
												.getValue();

										updateForm.find("name", "price")[0]
												.setValue((1 + _new) * bl);
									}
								},
								value : 0.32,
								name : "rate",
								anchor : '90%'
							}]
						}]

					}, {
						columnWidth : .99,
						layout : 'form',
						xtype : 'fieldset',
						title : '相似订单',
						collapsible : true,

						anchor : '95%',
						autoHeight : true,
						// collapsed : true,
						hideBorders : true,

						items : simGrid

					}]
		});
	}
	return updateForm;
}

function initGrid() {
	Ext.QuickTips.init();

	var xg = Ext.grid;

	// win
	if (!win) {
		win = new Ext.Window({
					layout : 'column',
					width : 500,
					// height : 600,
					autoHeight : true, // 4601782
					closeAction : 'hide',
					plain : true,
					items : form,
					modal : false,// 如果这个属性不设，弹出窗口会增加20M内存使用。

					buttons : [{
								text : '计算加工费',
								handler : function() {
									var sm = processGrid.getSelectionModel();
									if (sm.getCount() == 1) {
										autoProcess(sm.getSelections());

									} else {
										Ext.MessageBox.alert('提示', '请选择一条记录！');
									}
								}
							}, {
								text : '关闭',
								handler : function() {
									win.hide();
								}
							}]
				});
	}

	// Grid
	var sm = new xg.CheckboxSelectionModel();
	grid = new xg.GridPanel({
				id : 'button-grid',
				ds : ds,
				cm : new xg.ColumnModel([sm, {
							header : "序列号",
							width : 40,
							sortable : true,
							dataIndex : 'transnum'
						}, {
							header : "客户编号",
							width : 40,
							sortable : true,
							dataIndex : 'custid'
						}, {
							header : "牌号",
							width : 10,
							sortable : true,
							dataIndex : 'ssign'
						}, {
							header : "规格",
							width : 40,
							sortable : true,
							dataIndex : 'spec'
						}, {
							header : "镀层",
							width : 40,
							sortable : true,
							dataIndex : 'plate'
						}, {
							header : "请求日期",
							width : 40,
							sortable : true,
							dataIndex : 'reqdate'
						}]),
				sm : sm,
				stripeRows : true,

				viewConfig : {
					forceFit : true
				},

				// inline toolbars
				tbar : [{
							text : '进行快速报价',
							tooltip : '利用相似度进行快速报价',
							iconCls : 'add',
							onClick : function() {
								if (sm.getCount() == 1) {
									window.location.href="quickPriceIndex.jsp?transnum="+sm.getSelections()[0].data["transnum"];
								} else {
									Ext.MessageBox.alert('提示', '请选择一条记录！');
								}
							}
						}, '-'/*, {
							text : '进行产品报价',
							tooltip : '按照规范进行详细报价',
							iconCls : 'option',
							onClick : function() {
								if (sm.getCount() == 1) {

									detailSm = sm;
									var _data = sm.getSelections()[0];
									TRANSNUM = _data.data["transnum"];

									detailForm = getDetailForm();

									var items = new Ext.util.MixedCollection();
									items.add("form", detailForm);
									win.items = items;
									win.show();

									detailFormStore.load({
												params : {
													transnum : _data.data["transnum"]
												},
												callback : function() {
													detailForm.getForm()
															.reset();
													detailForm
															.getForm()
															.loadRecord(detailFormStore
																	.getAt(0));

												}
											});
									detailGridStore.load({
												params : {
													transnum : _data.data["transnum"]
												}
											});
									// grid.hide();

								} else {
									Ext.MessageBox.alert('提示', '请选择一条记录！');
								}
							}
						}*/],

				bbar : new Ext.PagingToolbar({
							pageSize : 10,
							store : ds,
							displayInfo : true,
							displayMsg : '显示第 {0} 条到 {1} 条记录，一共 {2} 条',
							emptyMsg : "没有记录"
						}),
				width : 750,
				autoHeight : true,
				// frame:true,
				title : '产品报价',
				iconCls : 'icon-grid',
				renderTo : 'main'
			});
};
function saveManuCost() {

	if (dsDirty) {// 如果ds数组已经修改过了。则进行保存。
		dsDirty = false;

		DetailPrice.updateManuCost(convert(detailFormStore.getAt(0)), function(
						_ret) {

					;
				})
	}
}
function saveProcsDetail() {
	if (processDsDirty) {
		dwr.engine.setAsync(false);
		detailGridStore.each(function(rec) {
					if (rec)
						DetailPrice.updateProcess(convert(rec), function(ret) {

								});
				});
		processDsDirty = false;

		dwr.engine.setAsync(true);
	}
};
function convert(_rec) {
	var obj = {};

	for (var property in _rec.data) {
		if (/status/.test(property))
			continue;
		var property2 = property.replace('2', '');
		if (/(date)|(Date)/.test(property)
				&& (!/(update)|(Update)/.test(property)))
			obj[property2] = Date.parseDate(_rec.data[property], 'Y-m-d');
		else
			obj[property2] = _rec.data[property];
	}

	return obj;
}

function initDD(updateForm, windowSm) {
	if (!flag) {
		var formPanelDropTargetEl = updateForm.getEl();
		var formPanelDropTarget = new Ext.dd.DropTarget(formPanelDropTargetEl,
				{
					ddGroup : 'gridDDGroup',
					notifyEnter : function(ddSource, e, data) {

						// Add some flare to invite drop.
						// alert(ddSource.getCount());
						updateForm.body.stopFx();
						updateForm.body.highlight();
					},
					notifyDrop : function(ddSource, e, data) {

						var selectedRecord = ddSource.dragData.selections[0];
						// 这里需要处理一下，原来的编号，主id编号不变
						var _rec = windowSm.getSelections()[0];
						// alert(windowSm.getSelections().length);

						selectedRecord.data["transnum"] = _rec.data["transnum"];
						selectedRecord.data["linenum"] = processDetailForm
								.find("name", "linenum")[0].getValue();

						// Load the record into the form

						updateForm.getForm().loadRecord(selectedRecord);

						return (true);
					}
				});
		flag = true;
	}
}
